# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.NetworkServices.V1.Model.WasmPlugin do
  @moduledoc """
  `WasmPlugin` is a resource representing a service executing a customer-provided Wasm module.

  ## Attributes

  *   `createTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The timestamp when the resource was created.
  *   `description` (*type:* `String.t`, *default:* `nil`) - Optional. A human-readable description of the resource.
  *   `labels` (*type:* `map()`, *default:* `nil`) - Optional. Set of labels associated with the `WasmPlugin` resource. The format must comply with [the following requirements](/compute/docs/labeling-resources#requirements).
  *   `logConfig` (*type:* `GoogleApi.NetworkServices.V1.Model.WasmPluginLogConfig.t`, *default:* `nil`) - Optional. Specifies the logging options for the activity performed by this plugin. If logging is enabled, plugin logs are exported to Cloud Logging. Note that the settings relate to the logs generated by using logging statements in your Wasm code.
  *   `mainVersionId` (*type:* `String.t`, *default:* `nil`) - Optional. The ID of the `WasmPluginVersion` resource that is the currently serving one. The version referred to must be a child of this `WasmPlugin` resource.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Identifier. Name of the `WasmPlugin` resource in the following format: `projects/{project}/locations/{location}/wasmPlugins/{wasm_plugin}`.
  *   `updateTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The timestamp when the resource was updated.
  *   `usedBy` (*type:* `list(GoogleApi.NetworkServices.V1.Model.WasmPluginUsedBy.t)`, *default:* `nil`) - Output only. List of all [extensions](https://cloud.google.com/service-extensions/docs/overview) that use this `WasmPlugin` resource.
  *   `versions` (*type:* `%{optional(String.t) => GoogleApi.NetworkServices.V1.Model.WasmPluginVersionDetails.t}`, *default:* `nil`) - Optional. All versions of this `WasmPlugin` resource in the key-value format. The key is the resource ID, and the value is the `VersionDetails` object. Lets you create or update a `WasmPlugin` resource and its versions in a single request. When the `main_version_id` field is not empty, it must point to one of the `VersionDetails` objects in the map. If provided in a `PATCH` request, the new versions replace the previous set. Any version omitted from the `versions` field is removed. Because the `WasmPluginVersion` resource is immutable, if a `WasmPluginVersion` resource with the same name already exists and differs, the request fails. Note: In a `GET` request, this field is populated only if the field `GetWasmPluginRequest.view` is set to `WASM_PLUGIN_VIEW_FULL`.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :createTime => DateTime.t() | nil,
          :description => String.t() | nil,
          :labels => map() | nil,
          :logConfig => GoogleApi.NetworkServices.V1.Model.WasmPluginLogConfig.t() | nil,
          :mainVersionId => String.t() | nil,
          :name => String.t() | nil,
          :updateTime => DateTime.t() | nil,
          :usedBy => list(GoogleApi.NetworkServices.V1.Model.WasmPluginUsedBy.t()) | nil,
          :versions =>
            %{
              optional(String.t()) =>
                GoogleApi.NetworkServices.V1.Model.WasmPluginVersionDetails.t()
            }
            | nil
        }

  field(:createTime, as: DateTime)
  field(:description)
  field(:labels, type: :map)
  field(:logConfig, as: GoogleApi.NetworkServices.V1.Model.WasmPluginLogConfig)
  field(:mainVersionId)
  field(:name)
  field(:updateTime, as: DateTime)
  field(:usedBy, as: GoogleApi.NetworkServices.V1.Model.WasmPluginUsedBy, type: :list)
  field(:versions, as: GoogleApi.NetworkServices.V1.Model.WasmPluginVersionDetails, type: :map)
end

defimpl Poison.Decoder, for: GoogleApi.NetworkServices.V1.Model.WasmPlugin do
  def decode(value, options) do
    GoogleApi.NetworkServices.V1.Model.WasmPlugin.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.NetworkServices.V1.Model.WasmPlugin do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
